//-----------------------------------------------------------------
//UNIVERSIDAD DEL VALLE DE GUATEMALA
//CC2003- ALGORITMOS Y ESTRUCTURAS DE DATOS
//HOJA DE TRABAJO No.9
//LUIS ANTONIO SIGUENZA - 10297
//-----------------------------------------------------------------

import java.util.*;
public class DriverDijkstra {
    public static void main(String[] args) {
    
    //CREACIÓN DE OBJETOS
    Dijkstra algoritmo1= new Dijkstra();    //ALGORITMO PARA REPRESENTAR EL GRAFO   
    GraphList<String,Integer> GRAFO1= new GraphListDirected<String,Integer>(); //GRAFO
    Scanner ingreso = new Scanner (System.in);  //INGRESO DESDE EL TECLADO
    LinkedList<String> PAISES1 = new LinkedList<String>(); //LISTA DE PAISES INGRESADOS
    int paises, distancia=0,salida=0; 
    String pais="",pais2="";
    
    //SE MUESTRA EN PANTALLA 
    bienvenida();
    //SE PIDE AL USUARIO INGRESAR LA CANTIDAD DE PAISES A UBICAR (NODOS)
    paises= obtenerNumero("Ingrese cantidad de paises a ubicar: ",true);
    
    
    //NOMBRES DE LOS NODOS
    do{
        System.out.print("Ingrese pais: ");
        pais=ingreso.nextLine();
        PAISES1.add(pais);
        GRAFO1.add(pais);
        paises--;
        
    }while (paises!=0);
    

    
    System.out.println("Ingrese distancia que existe entre los paises ingresados (1 o 2)");
    
    //INGRESO DE PESOS DE ENLACE ENTRE CADA NODO
    int c1=0;
    while(c1 <=(PAISES1.size()-1)){
        for (int c=0; c<PAISES1.size(); c++){
            distancia=obtenerNumero("Distancia --> " + PAISES1.get(c1) +"-" + PAISES1.get(c)+": ",true);
            GRAFO1.addEdge(PAISES1.get(c1), PAISES1.get(c), distancia);
        
        }
        c1++;
    }
    
    //INGRESO DE PAIS DE BUSQUEDA
    
    System.out.println("\nPARA SALIR DEL PROGRAMA INGRESE: EXIT");
    do{
    System.out.println("Ingreso pais de busqueda de rutas: ");
    pais2=ingreso.nextLine();
    
    if(PAISES1.indexOf(pais2)>-1){
        System.out.println("Recorridos del pais: " + pais);
        System.out.println(algoritmo1.algoritmoDijkstra(GRAFO1,pais2));
        
    }else{
        if ("exit".equals(pais2) ||"EXIT".equals(pais2)  ){
            System.out.println("\nAPAGANDO EQUIPO");
            salida=1;
          
        } else
        System.out.println("ERROR --> Este pais no existe");
    }
    
    }while(salida!=1);
    
    
 }
    
    //Método para obtener un numero ingresado por el usuario    
    public static int obtenerNumero(String msj, boolean mostrar){
        Scanner teclado = new Scanner(System.in);
        int numero2 = -1;
        int numero=0;
        do{
        	System.out.print(msj);
        	try{
                numero = teclado.nextInt();
                numero2= -1;
            }
            catch(InputMismatchException exception){
                if (mostrar)
                    System.out.println("ERROR - Ingrese dato correcto");
                	numero2=0;
            }
            finally{
                teclado.nextLine();
            }
            
        }while(numero2!=-1);
	return numero;
    }
    
    public static void bienvenida() {
        System.out.println();
        System.out.println("------------------------------------------------");
        System.out.println("]|I{-------------- GRAFOS UVG --------------}I|[");
        System.out.println("------------------------------------------------");
        System.out.println("             RUTAS EN EL MUNDO ENTERO           ");
        System.out.println("------------------------------------------------");
        System.out.println("INGRESE TODOS LOS DATOS EN MAYUSCULA O MINUSCULA");
        System.out.println("------------------------------------------------");
    }
    
    

    
    
    
}
